package com.yellowcong.filter;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Component;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;

/**
 * 创建日期:2018年3月16日 <br/>
 * 创建用户:yellowcong <br/>
 * 功能描述:自定义过滤器，需要实现ZuulFilter
 */
@Component
public class TokenFilter extends ZuulFilter {

	/**
	 * 过滤器的具体逻辑 ctx.setSendZuulResponse(false)令zuul不允许请求，
	 * ctx.setResponseStatusCode(401)设置了其返回的错误码
	 * ctx.setResponseBody(body)编辑返回body内容
	 * 
	 * @return
	 */
	@Override
	public Object run() {
		RequestContext ctx = RequestContext.getCurrentContext();
		HttpServletRequest request = ctx.getRequest();
		
		//获取token 的参数
		String token = request.getParameter("token");
		if(token == null) {
			//zuul不处理这条请求
            //ctx.setSendZuulResponse(false);
            //设定返回的错误代码
            //ctx.setResponseStatusCode(401);
            
            //写数据到浏览器
            //ctx.setResponseBody("token is null");
            return null;
        }
		return null;
	}

	/**
	 * 判断过滤器是否执行
	 * 本文true,永远过滤
	 */
	@Override
	public boolean shouldFilter() {
		return true;
	}

	/**
	 * 通过int值来定义过滤器的执行顺序
	 */
	@Override
	public int filterOrder() {
		return 0;
	}

	/**
	 * 返回过滤器类型
	 * 
	 * @return pre：可以在请求被路由之前调用 
	 * 	       routing：在路由请求时候被调用 
	 *         post：在routing和error过滤器之后被调用
	 *         error：处理请求时发生错误时被调用
	 */
	@Override
	public String filterType() {
		return "pre";
	}

}
